package com.carl.service;

import java.util.List;

import javax.annotation.Resource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import com.carl.bean.UserInfo;
import com.carl.dao.UserInfoDao;
import com.carl.sysutil.StringUtil;
import com.google.code.morphia.Key;
import com.google.code.morphia.query.UpdateResults;

@Service
public class UserService {
	
	protected final Logger logger = LoggerFactory.getLogger(UserService.class);	
	public UserInfoDao userInfoDao;
	
	@Resource
	public void setUserDao(UserInfoDao userDao) {
		this.userInfoDao = userDao;
	}
	
	/**
	 * 判断此用户是否存在
	 * @param userInfo
	 * @return
	 */
	public int userIsExist(UserInfo userInfo){
		
		List<UserInfo> user = userInfoDao.findIds("userName", userInfo.getUserName());
		if(user == null || user.size() == 0){
			return UserInfo.USER_IS_NO_EXIST;
		}else{
			for (UserInfo userObj : user) {
				String pass = userObj.getPassword();
				if(pass.equals(userInfo.getPassword())){
					return UserInfo.USER_IS_EXIST;
				}
			}
			return UserInfo.USER_IS_NO_EXIST;
		}
	}
	
	/**
	 * 保存用户信息, 保存成功返回 6</br>
	 * 用户已经存在，则返回1；</br>
	 * 用户名无效，则返回3   </br>
	 * 密码为空，则返回4 </br>
	 * 用户保存失败，则返回7
	 * @param user
	 * @return
	 */
	public int saveUserInfo(UserInfo user){
		
		if(!StringUtil.isNotBlankEmpty(user.getUserName())){
			return UserInfo.USER_NAME_INVALID;
		}
		
		int result = userIsExist(user);
		if(result != UserInfo.USER_IS_NO_EXIST){
			return UserInfo.USER_IS_EXIST;
		}
		
		if(!StringUtil.isNotBlankEmpty(user.getPassword())){
			return UserInfo.USER_PASSWORD_IS_NULL;
		}
		
		Key<UserInfo> keyValue = userInfoDao.save(user);
		if(StringUtil.isNotBlankEmpty(keyValue.toString())){
			return UserInfo.USER_OPER_SUCCESS;
		}
		return UserInfo.USER_OPER_ERROR;
	}
	
	/**
	 * 查找用户，通过调节，带分页功能
	 * @param user  查询调节
	 * @param offset 起始页
	 * @param limit  每页条数
	 * @return List<UserInfo>
	 */
	public List<UserInfo> findUserByParam(UserInfo user, Integer offset, Integer limit){
		return userInfoDao.findUser(user, offset, limit);
	}
	
	/**
	 * 根据输入的参数 user 只返回一条记录
	 * @param user
	 * @return UserInfo
	 */
	public UserInfo findOneUser(UserInfo user){
		return userInfoDao.findUserOne(user);
	}
	
	
	/**
	 * 对用户信息进行更新操作，成则返回被更新的记录数
	 * @param user
	 * @return
	 */
	public int updateUserInfo(UserInfo user){
		UpdateResults<UserInfo> result = userInfoDao.updateUserInfo(user);
		if(result != null){
			return result.getUpdatedCount();
		}else{
			logger.error("update the info of user fail!!---->[updateUserInfo(UserInfo user)]");
			return 0;
		}
	}
	
	public String deleteUser(UserInfo user){
		return userInfoDao.deleteUser(user);
	}
	
	/**
	 * 获取证书的有效性，如果证书有效则返回true，无效返回false
	 * @return
	 */
	public boolean judgeLiceIsValid(){
		StringUtil util = new StringUtil();
		String licPath = util.getValue(StringUtil.LICENSE_KEY_IN_PROPERTIES);
		if(!StringUtil.isNotBlankEmpty(licPath)){
			logger.error("get the path of license is error!!!");
		}else{
			//TODO
		}
		return true;
	}
}
